iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
佛心分享-刷題不只是刷題

Ruby刷題:沒那麼痛苦的痛苦面具系列 第 21

DAY 21:Best Time to Buy and Sell Stock with Transaction Fee 永遠不回頭的貪婪演算法!

  • 分享至 

  • xImage
  •  

٩(๑> ₃ <)۶з
嗨,我是wec,今天是DAY 21。

🔎 題目難度與描述

難度:MEDIUM

題目描述:

給定一個整數數組prices,表示每一天的股票價格,以及一個整數fee,表示每次交易的手續費。目標是找到最佳的交易策略,獲得最大的利潤,考慮到每次交易時需扣除的手續費。

🔎 解題思路&程式碼

1️⃣ 貪婪解法

第1步: 設置total_profit為 0。
第2步: 從第二天開始遍歷價格組數,如果今天的價格比昨天高,就計算利潤並扣除手續費。
第3步: 返回total_profit,確保不小於 0。
程式碼:

def max_profit(prices, fee)
  total_profit = 0

  (1...prices.length).each do |i|
    if prices[i] > prices[i - 1] 
      total_profit += prices[i] - prices[i - 1] - fee 
    end
  end

  total_profit > 0 ? total_profit : 0
end

🔎 總結

時間複雜度

貪婪算法: 時間複雜度為O(n),n為組數長度。
➡️ 解題的核心在於根據股票價格的變化來決定最佳的買賣策略,使用貪婪算法可以簡化計算過程,根據價格的上漲情況來累積利潤。雖然貪婪算法在考慮手續費的情況下可能無法獲得最佳解(這題用動態規劃其實會更好,但貪婪演算法總是要出場一次><),但簡化邏輯也可以算出答案⑉¯ ꇴ ¯⑉!!

那麽,以上就是今天的內容!

相信IT人動腦時都要吃點東西,所以今天邊寫邊吃多力多滋海鮮口味。
明天要說:Ruby精選刷題!Medium路跑D-14(>∀・)⌒☆


上一篇
DAY 20:Best Time to Buy and Sell Stock II 永遠不回頭的貪婪演算法!
下一篇
DAY 22:Binary Tree Right Side View 佇列排排站!
系列文
Ruby刷題:沒那麼痛苦的痛苦面具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言